package hxy.bytecode.jdk;

/**
 * @author eric
 * @date 2021/3/16
 * https://juejin.cn/post/6844903663496871943
 */
public class StringTest {

    /**
     * 这两种不同的创建方法是有差别的，第一种方式是在常量池中拿对象，第二种方式是直接在堆内存空间创建一个新的对象。
     */
    public void createString(){
        //        第一种方式是在常量池中拿对象
        String str1 = "abcd";

//        第二种方式是直接在堆内存空间创建一个新的对象。
        String str2 = new String("abcd");

        System.out.println(str1 == str2);//false
        System.out.println(str1.equals(str2));//true
    }

    public static void internString(){
        String s1 = new String("计算机");
        String s2 = s1.intern();
        String s3 = "计算机";
        System.out.println(s2);//计算机
        System.out.println(s1 == s2);//false，因为一个是堆内存中的String对象一个是常量池中的String对象，
        System.out.println(s3 == s2);//true，因为两个都是常量池中的String对

    }

    public static void pingjieString(){
        String str1 = "str";
        String str2 = "ing";

        String str3 = "str" + "ing";//常量池中的对象
        String str4 = str1 + str2; //在堆上创建的新的对象
        String str5 = "string";//常量池中的对象
        System.out.println(str3 == str4);//false
        System.out.println(str3 == str5);//true
        System.out.println(str4 == str5);//false

    }



    public static void main(String[] args) {
//        internString();
        pingjieString();
    }
}
